<?php
/**
 * 参考网站：http://www.dawnfly.cn/article-1-353.html
 * Created by swagger_zxd.
 * User: zxd
 * Date: 2018/3/23
 * Time: 16:30
 */

namespace app\pay\controller;



use Alipay_wap\AlipayNotify;
use Alipay_wap\AlipaySubmit;
use think\Config;
use think\Controller;
use think\exception\HttpException;
use think\Session;

class Alipay extends Controller{

    /**
     * 发起支付页面
     */
    public function alipay_wap_submit(){
        return $this->fetch();
    }

    public function aliapy_wap_do($type){
        if(!$type){
            throw new HttpException(403,'非法请求');
        }

        $widtotal_fee=$_POST['WIDtotal_fee'];
        $alipay_config=Config::get('aplipay_wap_config');

        switch ($type){
            case 'cz':
                if (empty($widtotal_fee)){ //判断金额是否为空
                    return alert('请输入充值金额',url('pay/alipay_wap_submit'));
                } elseif (!preg_match('/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|
                (^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/',$widtotal_fee)) { //判断金额是否正确
                    return alert('请输入充值金额',url('pay/alipay_wap_submit'));
                }
                Session::set('dawn_alipay_pay_action','cz');
                break;
            case 'hk':
                Session::set('dawn_alipay_pay_action','hk');
                break;
        }

        //商户订单号，商户网站订单系统中唯一订单,必填
        $out_trade_no=$_POST['WIDout_trade_no'];
        //订单名称，必填
        $subject=$_POST['WIDsubject'];
        //付款金额,必填
        $total_fee=$_POST['WIDtotal_fee'];
        //收银台页面是哪个,商品展示的超链接,必填
        $show_url=$_POST['WIDshow_url'];

        //商品描述，可空
        $body=$_POST['WIDbody'];

        //构造要请求的参数数组，无需改动
        $parameter=array(
            //系统级参数
            "service"=>$alipay_config['service'],
            "partner"=>$alipay_config['partner'],
            "seller_id"=>$alipay_config['seller_id'],
            "payment_type"=>$alipay_config['payment_type'],
            "notify_url"=>$alipay_config['notify_url'],
            "return_url"=>$alipay_config['return_url'],
            "input_charset"=>trim(strtolower($alipay_config['input_charset'])),
            //应用参数
            "out_trade_no"=>$out_trade_no,
            "subject"=>$subject,
            "total_fee"=>$total_fee,
            "show_url"=>$show_url,
            "body"=>$body,
        );


        //建立请求
        $alipaySubmit=new AlipaySubmit($alipay_config);
        $html_text=$alipaySubmit->buildRequestForm($parameter,"get","确认");
        echo $html_text;
    }

    public function alipay_wap_notify()
    {
        $alipay_config=Config::get('alipay_wap_config');

        //计算得出通知验证结果
        $alipayNotify=new AlipayNotify($alipay_config);
        $verify_result=$alipayNotify->verifyNotify();

        if($verify_result){ //验证成功
            //商户订单号
            $out_trade_no=$_POST['out_trade_no'];
            //支付宝交易号
            $trade_no=$_POST['trade_no'];
            //交易状态
            $trade_status=$_POST['trade_status'];

            if($_POST['trade_status'] == "TRADE_FINISHID"){
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                //如果有做过处理，不执行商户的业务程序

                //注意：
                //退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知

                //调试用，写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
            }elseif($_POST['trade_status']=="TRADE_SUCCESS"){
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                //如果有做过处理，不执行商户的业务程序

                //注意：
                //付款完成后，支付宝系统发送该交易状态通知

                //调试用，写文本函数记录程序运行情况是否正常
                //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
            }
            echo "success";

        }else{
            //验证失败
            echo "fail";

            //调试用，写文本函数记录程序运行情况是否正常
            //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
        }
    }


    public function alipay_wap_return(){
        $alipay_config=Config::get('alipay_wap_config');
        //计算得出通知验证结果
        $alipayNotify=new AlipayNotify($alipay_config);
        $verify_result=$alipayNotify->verifyReturn();
        if($verify_result){//验证成功
            //////////////////////////////////////////////////////////
            ///////////////////////////////////////////////////////////////////////////
            //请在这里加上商户的业务逻辑程序代码

            //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
            //获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表

            //商户订单号
            $out_trade_no=$_POST['out_trade_no'];
            //支付宝交易号
            $trade_no=$_GET['trade_no'];
            //交易状态
            $trade_status=$_GET['trade_status'];

            if($_GET['trade_status'] == "TRADE_SUCCESS" || $_GET['trade_status'] == "TRADE_FINISHID"){
                //判断该笔订单是否在商户网站中已经做过处理
                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                //如果有做过处理，不执行商户的业务程序
            }else{
                echo "trade_status=" . $_GET['trade_status'];
            }


        }else{
            //验证失败
            //如要调试，请看alipay_notify.php页面的verifyReturn函数
            echo "验证失败";
        }
    }






}